using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace AppManagement.MainManagers
{
	#region using
	using DevComponents.DotNetBar;
	using AppManagement.Models;
	using AppManagement.Repositories;
	using AppManagement.Helpers;
	using AppManagement.UsersManager;
	using System.Data;
	using System.Drawing;
	using System.IO;
    using AppManagement.Reports;
	#endregion

	public partial class FrmChiTietPHIEUXUATKHO : Office2007Form
	{
		public EventHandler Handler { get; set; }
		private DataTable DataSource;
		private int PHIEU_XUAT_KHO_ID;
        private int PHIEU_YEU_CAU_ID;

        public FrmChiTietPHIEUXUATKHO(int phieu_yeu_cau_id, int phieu_xuat_kho_id = -1)
        {
            InitializeComponent();
            PHIEU_YEU_CAU_ID = phieu_yeu_cau_id;
            PHIEU_XUAT_KHO_ID = phieu_xuat_kho_id;
        }

		private void FrmChiTietPHIEUXUATKHO_Load(object sender, EventArgs e)
		{
			InitGridView();
			InitDataSource();
            LoadPhieuYeuCau();
			if (PHIEU_XUAT_KHO_ID != -1)
			{
				LoadPHIEUXUATKHO();
			}
		}

        public void LoadPhieuYeuCau()
        {
            var phieuyeucau = PHIEUYEUCAURepository.SelectByID(PHIEU_YEU_CAU_ID);
            txtPHIEUYEUCAU_ID.Text = phieuyeucau.PHIEUYEUCAU_ID.ToString();
            txtChiNhanh.Text = phieuyeucau.CHINHANH.TEN_CHI_NHANH;
            txtNgayYeuCau.Text = String.Format("{0:dd/MM/yyyy}", phieuyeucau.NGAY_YEU_CAU);
            txtNgayXuatKho.Text = String.Format("{0:dd/MM/yyyy}", DateTime.Now);
        }

		private void InitGridView()
		{
			DataGridViewTextBoxColumn objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "ID Thiết bị",
				DataPropertyName = "THIET_BI_ID",
				Name = "THIET_BI_ID",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/3))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
				HeaderText = "Tên thiết bị",
				DataPropertyName = "TEN_THIET_BI",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/3))
			};
			dtgvData.Columns.Add(objColumn);
			objColumn = new DataGridViewTextBoxColumn
			{
                HeaderText = "Số lượng xuất",
				DataPropertyName = "SO_LUONG",
				Name = "SO_LUONG",
				Width = (int)((dtgvData.Width - dtgvData.RowHeadersWidth)*((double)1/3)) - 1
			};
			dtgvData.Columns.Add(objColumn);
		}

		public void InitDataSource()
		{
			DataSource = new DataTable();
			DataSource.Columns.Add("THIET_BI_ID");
			DataSource.Columns.Add("TEN_THIET_BI");
			DataSource.Columns.Add("SO_LUONG");
			DataView objTimeSheetDV = new System.Data.DataView(DataSource);
			objTimeSheetDV.AllowNew = false;
			dtgvData.AutoGenerateColumns = false;
			dtgvData.DataSource = objTimeSheetDV;
			dtgvData.ClearSelection();
		}

		private void btnThem_Click(object sender, EventArgs e)
		{
			FrmCapNhatCHITIETPHIEUXUATKHO frm = new FrmCapNhatCHITIETPHIEUXUATKHO();
			frm.Handler += GetCHITIETPHIEUXUATKHO;
			frm.ShowDialog();
		}

		public void GetCHITIETPHIEUXUATKHO(object sender, EventArgs e)
		{
			var eventType = (TransferSimpleDataEvent)e;
			string[] comp = eventType.Data.Split(new char[] { '#' });
			var item = THIETBIRepository.SelectByID(int.Parse(comp[0]));
			if(item != null)
			{
				DataSource.Rows.Add(item.THIET_BI_ID, item.TEN_THIET_BI, comp[1]);
			}
		}

		private void btnXoa_Click(object sender, EventArgs e)
		{
			if (DataSource.Rows.Count > 0)
			{
				DataSource.Rows.RemoveAt(dtgvData.SelectedRows[0].Index);
			}
		}

		private bool ValidateInput(ref string errorText)
		{
			if (DataSource.Rows.Count == 0)
			{
				errorText = "Danh sách hiện thời không có gì!";
				return false;
			}

            var lstThietBiYeuCau = CHITIETPHIEUYEUCAURepository.SelectByPHIEUYEUCAU_ID(PHIEU_YEU_CAU_ID);
            for (int i = 0; i < DataSource.Rows.Count; i++)
            {
                var exist = false;
                foreach (var item in lstThietBiYeuCau)
                {
                    // Kiem tra thiet bi trong phieu xuat khong co trong phieu yeu cau
                    if (item.THIET_BI_ID.Value.ToString() == DataSource.Rows[i]["THIET_BI_ID"].ToString())
                    {
                        exist = true;
                        break;
                    }
                }
                if (!exist)
                {
                    errorText = "Thiết bị " + DataSource.Rows[i]["TEN_THIET_BI"].ToString() + " trong phiếu xuất không có trong phiếu yêu cầu!";
                    return false;
                }
                else
                {
                    var thietbiYeuCau = lstThietBiYeuCau.FirstOrDefault(n=>n.THIET_BI_ID == int.Parse(DataSource.Rows[i]["THIET_BI_ID"].ToString()));
                    // So luong thiet bi trong phieu xuat > so luong thiet bi trong phieu yeu cau
                    if (int.Parse(DataSource.Rows[i]["THIET_BI_ID"].ToString()) > thietbiYeuCau.SO_LUONG.Value)
                    {
                        errorText = "Số lượng thiết bị " + DataSource.Rows[i]["TEN_THIET_BI"].ToString() + " trong phiếu xuất > trong phiếu yêu cầu!";
                        return false;
                    }
                }
            }

			return true;
		}

		private void btnThoat_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void LoadPHIEUXUATKHO()
		{
			var phieuxuatkho = PHIEUXUATKHORepository.SelectByID(PHIEU_XUAT_KHO_ID);
			if (phieuxuatkho != null)
			{
                txtPHIEU_XUAT_KHO_ID.Text = PHIEU_XUAT_KHO_ID.ToString();
				LoadCHITIETPHIEUXUATKHO(phieuxuatkho);
			}
		}

		private void LoadCHITIETPHIEUXUATKHO(PHIEUXUATKHO phieuxuatkho)
		{
			var lst = CHITIETPHIEUXUATKHORepository.SelectByPHIEU_XUAT_KHO_ID(phieuxuatkho.PHIEU_XUAT_KHO_ID);
			if (lst.Count > 0)
			{
				foreach (var item in lst)
				{
					DataSource.Rows.Add(item.THIET_BI_ID, item.THIETBI.TEN_THIET_BI, item.SO_LUONG);
				}
			}
		}

        private void btnInPhieu_Click(object sender, EventArgs e)
        {
            var phieu = PHIEUXUATKHORepository.SelectByID(PHIEU_XUAT_KHO_ID);
            FrmInPhieuXuatKho frm = new FrmInPhieuXuatKho
            {
                NgayXuatKho = phieu.NGAY_XUAT_KHO.Value,
                ChiNhanh = phieu.PHIEUYEUCAU.CHINHANH.TEN_CHI_NHANH,
                IDPhieuXuatKho = phieu.PHIEU_XUAT_KHO_ID
            };
            frm.ShowDialog();
        }
	}
}
